#include <assert.h>
#include <ctype.h>
#include <locale.h>
#include <errno.h>
#include <float.h>
#include <inttypes.h>
#include <limits.h>
#include <math.h>
#include <setjmp.h>
#include <signal.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>


int func_return_value (int *pIvalue)
{
    printf("***** func_return_value *****\n");
    int iRetStatus = 0; /* Default status is no change */
    if (*pIvalue > 10) {
        *pIvalue = *pIvalue * 45; /* Modify the value pointed to */
        iRetStatus = 1; /* indicate value was changed */
    }
    printf("func_return_value:  %d\n", iRetStatus);
    return iRetStatus; /* Return an error code */
}

// use a struct as a return value
typedef struct {
    int iStat; /* Return status */
    int iValue; /* Return value */
    } RetValue;

RetValue func_ruturn_struct (int iValue)
{
    printf("***** func_ruturn_struct *****\n");
    RetValue iRetStatus = {0, iValue};
    if (iValue > 10) {
        iRetStatus.iValue = iValue * 45;
        iRetStatus.iStat = 1;
    }
    printf("iRetStatus.iValue: %d, iRetStatus.iStat: %d\n", iRetStatus.iValue, iRetStatus.iStat);
    return iRetStatus;
}

void main(void)
{
    int value = 333;
    func_return_value(&value);
    RetValue iRet = func_ruturn_struct (value);
    system("pause");
}


